package com.campus.food.service;

import com.campus.food.model.entity.Cart;

import java.util.List;
import java.util.Map;

/**
 * 购物车服务接口
 * 
 * @author Claude3.7 Sonnet
 * @since 2025-05-29
 */
public interface CartService {


    /**
 * 获取用户购物车详情信息（包含菜品名称、图片等详细信息）
 * 
 * @param userId 用户ID
 * @return 购物车详情列表
 */
List<Map<String, Object>> getUserCartDetail(Long userId);
    
    /**
     * 添加商品到购物车
     * @param cart 购物车项
     * @return 添加成功的购物车项
     */
    Cart addToCart(Cart cart);
    
    /**
     * 根据ID查询购物车项
     * @param id 购物车项ID
     * @return 购物车项信息
     */
    Cart getCartById(Long id);
    
    /**
     * 根据用户ID和菜品ID查询购物车项
     * @param userId 用户ID
     * @param foodId 菜品ID
     * @return 购物车项信息
     */
    Cart getCartByUserIdAndFoodId(Long userId, Long foodId);
    
    /**
     * 更新购物车项数量
     * @param id 购物车项ID
     * @param quantity 数量
     * @param userId 用户ID（用于权限验证）
     * @return 更新结果
     */
    boolean updateCartQuantity(Long id, Integer quantity, Long userId);
    
    /**
     * 删除购物车项
     * @param id 购物车项ID
     * @param userId 用户ID（用于权限验证）
     * @return 删除结果
     */
    boolean removeFromCart(Long id, Long userId);
    
    /**
     * 根据用户ID查询购物车列表
     * @param userId 用户ID
     * @return 购物车列表
     */
    List<Cart> getCartByUserId(Long userId);
    
    /**
     * 根据用户ID和商家ID查询购物车列表
     * @param userId 用户ID
     * @param merchantId 商家ID
     * @return 购物车列表
     */
    List<Cart> getCartByUserIdAndMerchantId(Long userId, Long merchantId);
    
    /**
     * 清空用户购物车
     * @param userId 用户ID
     * @return 清空结果
     */
    boolean clearCart(Long userId);
    
    /**
     * 清空用户在指定商家的购物车
     * @param userId 用户ID
     * @param merchantId 商家ID
     * @return 清空结果
     */
    boolean clearCartByMerchant(Long userId, Long merchantId);
    
    /**
     * 批量删除购物车项
     * @param ids 购物车项ID列表
     * @param userId 用户ID（用于权限验证）
     * @return 删除结果
     */
    boolean removeCartBatch(List<Long> ids, Long userId);
    
    /**
     * 查询用户购物车项数量
     * @param userId 用户ID
     * @return 购物车项数量
     */
    long getCartCount(Long userId);
    
    /**
     * 查询用户在指定商家的购物车项数量
     * @param userId 用户ID
     * @param merchantId 商家ID
     * @return 购物车项数量
     */
    long getCartCountByMerchant(Long userId, Long merchantId);
    
    /**
     * 获取所有购物车数据（管理员专用）
     * @param page 页码
     * @param size 每页大小
     * @param userId 用户ID（可选）
     * @param merchantId 商家ID（可选）
     * @return 购物车列表
     */
    List<Cart> getAllCarts(int page, int size, Long userId, Long merchantId);
} 